package repository.templates
import grails.converters.*
import repository.artefact.*
import repository.artefact.details.*

class TemplatesController {
    
    def templatesService    
    
    def getAllDetails = {                
        try {            
            def jerarquia = doGetJerarquiaDetallesArtefacto()
            
            if(jerarquia){
                render jerarquia
            } else {
                response.status = 404            
                render (contentType:'text/xml'){                
                    error {
                        message("Error")
                    }             
                }
            }
        } catch(Exception ex){
            render (contentType:'text/xml'){ 
                error {
                    message("Error")
                }
            } 
        }
    }
    
    def get = {                
        try {
            String n = params.nombreArchivo
            String v = params.version
            String p = params.path
            def template = doGetSingle(n,v,p)
            
            if(template){
                render template
            } else {
                response.status = 404            
                render (contentType:'text/xml'){ 
                    error {
                        nombreArchivo(params.nombreArchivo)
                        version(params.version)
                        path(params.path)
                    }
                }
            }
        } catch(Exception ex){
            render (contentType:'text/xml'){ 
                error {
                    message("Error")
                }
            } 
        }
    }
    
    def saveTemplate = {                       
        try {
            def xml = request.XML
            String contenido = xml.contenido                
            String path = xml.detalleArtefacto.path
            String nombreArchivo = xml.detalleArtefacto.nombreArchivo
            String numVersion = xml.detalleArtefacto.numVersion
            
            def d = new DetallesArtefacto(path:path,nombreArchivo:nombreArchivo,numVersion:numVersion)
            def template = new Template(contenido:contenido,detalleArtefacto:d)            
            
            boolean result = doPost(template)
            if(result){
                render template as XML
            } else {
                render (contentType:'text/xml'){ 
                    error {
                        message("Error")
                    }
                } 
            }                
        } catch(Exception ex){
            response.status = 404            
            render (contentType:'text/xml'){ 
                error (
                    message:"Error"
                )
            }
        }                        
    }
    
    
    
    /************** Auxiliares **************/    
    private XML doGetJerarquiaDetallesArtefacto(){
        def jerarquia = templatesService.getJerarquiaDetallesArtefacto()  
        
        return jerarquia ? jerarquia as XML : null        
    }
    
    private XML doGetSingle(String n, String v, String p){
        def template = templatesService.getTemplate(n,v,p)  
        
        return template ? template as XML : null        
    }
    
    private boolean doPost(Template template){
        boolean result = templatesService.saveTemplate(template)
        
        return result
    }
}
